package com.chart.chart.domian.utils;
import com.chart.chart.domian.dto.ChartDateTto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.ObjectUtils;

import java.util.List;
import java.util.Map;

/**
 * 图表参数校验工具类
 * 提供静态方法用于校验 ChartDateTto 对象的参数
 *
 * @author
 * @date 2024/10/17
 */
@Slf4j
public class ChartValidator {

    /**
     * 校验 ChartDateTto 对象的参数是否完整
     *
     * @param chartDateTto 要校验的对象
     * @return 校验结果，若校验失败返回错误信息；校验通过返回 null
     */
    public static String check(ChartDateTto chartDateTto) {
        if (chartDateTto == null) {
            log.error("做图失败，参数 chartDateTto 为空");
            return "做图失败，参数缺失: chartDateTto 为空";
        }

        Integer configId = chartDateTto.getConfigId();
        if (configId == null || ObjectUtils.isEmpty(chartDateTto.getDataList())) {
            log.error("做图失败，参数缺失 configId={}, dataList={}",
                    configId == null ? "为空" : configId,
                    ObjectUtils.isEmpty(chartDateTto.getDataList()) ? "为空" : chartDateTto.getDataList()
            );
            return "做图失败，参数缺失: 请确保提供有效的 configId 和 dataList。";
        }

        List<Map<String, Object>> dataList = chartDateTto.getDataList();
        // 检查 dataList 是否为空或没有数据
        if (dataList == null || dataList.isEmpty()) {
            return "数据列表为空";
        }

         // 获取第一行
        Map<String, Object> firstRow = dataList.get(0);
         // 假设第一列的键是 "column1"
        Object data = firstRow.get("column1"); // 根据实际情况修改键名
           // 检查第一行第一列的值是否为空或空字符串
        if (data == null || data.toString().isEmpty()) {
            return "第一行第一列不能为空";
        }
        int size = chartDateTto.getDataList().size();
        if(size>5000){
            return "数据量过大: 当前数据量为 " + size + "，超过允许的最大值 5000";
        }


        // 参数校验通过，返回 null
        return null;
    }


}
